package com.qtrue.thread;

/*
	多线程的创建：
		方式一：继承于Thread类
			1. 创建一个用于继承Thread类的子类
			2. 重写Thread类的run()方法 -> 线程中需要完成的操作声明在run()方法中
			3. 创建Thread类的子类的对象
			4. 通过此对象去调用start()方法
			
			例子：求出1-100以内所有的偶数
			
*/
public class ThreadCreate01_extendsThread {
	public static void main(String[] args) { // 两个线程：主线程（main） + 分线程（MyThread）
		// 3. 创建Thread类的子类的对象 （主线程main执行的操作）
		MyThread t1 = new MyThread();
		
		// 4. 通过此对象去调用start()方法：1.启动当前线程 （主线程main执行的操作） 2.调用当前线程的run()方法
		t1.start();
		
		System.out.println("hello"); // 在主线程main执行的操作
		
		// 再声明一个for循环输出1-100内的偶数（用于观察两个线程的执行情况）
		// 如下操作仍是在main线程中执行的
		for(int i = 1;i<100;i++) {
			if(i % 2 == 0) {
				System.out.println(Thread.currentThread().getName() + "：" + i);
			}
		}
		
		// 创建线程中的两个问题：
		// 问题一：不能通过直接调用run()的方式启动线程。
//		t1.run();
		
		// 问题二：再次当前启动线程遍历1-100以内的偶数：不能让已经start()的线程再次执行，否则会报错。
//		t1.start();
		// 正确方法应该是再创建一个当前线程类的对象然后调用start()
		MyThread t2 = new MyThread();
		t2.start();
	}
}

// 1. 创建一个用于继承Thread类的子类
class MyThread extends Thread{
	// 2. 重写Thread类的run()方法  -> 线程中需要完成的操作声明在run()方法中
	@Override
	public void run() {
		// 例子：求出1-100以内所有的偶数
		for(int i=1;i<100;i++) {
			if(i % 2 == 0) {
				// Thread.currentThread().getName()：获取当前线程名称
				System.out.println(Thread.currentThread().getName() + "：" + i);
			}
		}
	}
}



